package com.ikas.ai.server.module.analyse.algorithm;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays;
import java.util.List;

/**
 * 3σ算法
 *
 * @author tang.xuandong
 * @version 1.0.0
 * @date 2023/4/18 11:44
 */
public class ThreeSigmaCalculator {

    public static double[] calculateThreeSigma(List<Double> data) {
        if (data == null || data.size() < 4) {
            return null;
        }
        double sum = 0.0;
        for (Double value : data) {
            sum += value;
        }
        Double mean = sum / data.size();        // 原始数组的算数平均值方法

        sum = 0.0;
        for (Double value : data) {
            sum += Math.pow(value - mean, 2);
        }
        double variance = sum / data.size();    // 原始数组的标准方差值计算方法
        double stdDev = Math.sqrt(variance);    // 原始数组的剩余误差方法

        double[] sigmaValues = new double[2];
        sigmaValues[0] = doubleAccuracy(mean);
        sigmaValues[1] = doubleAccuracy(stdDev);

        return sigmaValues;
    }


    /**
     * double精度问题
     *
     * @param d double
     * @return double
     */
    public static double doubleAccuracy(double d) {
        return BigDecimal.valueOf(d).setScale(3, RoundingMode.UP).doubleValue();
    }

}
